require "test/unit"
class AboutControlStatements<Test::Unit::TestCase
  def test_string1
    if true
      result = :true_value
    else
      result = :false_value
    end
    assert_equal :true_value, result 
  end
  #控制语句，表明不同的情况，在这里result为真，故为:true_value

  def test_string2
    result = :defult_value
    if true
      result = :true_value
    end
    assert_equal :true_value, result
  end
  #在控制语句里面，如果符合条件，则返回为对应的条件值
  
  def test_string3
    value = if true
              :true_value
            else
              :false_value
            end
    assert_equal :true_value, value
    value = if false
              :true_value
            else
              :false_value
            end
    assert_equal :false_value, value
  end
  #在控制语句里，只取对应的条件的值

  def test_string4
    value = if false
              :true_value
            end
    assert_equal nil, value
  end
  #如果没有符合条件的值，那么返回为nil

  def test_string5
    assert_equal :true_value,   (true ?  :true_value: :false_value)
    assert_equal :false_value,  (false ?  :true_value: :false_value)
  end
  #控制语句可以用:隔开条件值

  def test_string6
    result = :default_value
    result = :true_value if true
    assert_equal :true_value, result
  end
  #单个条件时可以直接使用if，多个条件时if,else,end， 符合条件则取条件值

  def test_string7
    result = :default_value
    unless false
      result = :false_value
    end
    assert_equal :false_value, result
  end
  #如果不满足false得到:false_value, 这里为true, 故为:false_value

  def test_string8
    result = :default_value
    result = :false_value unless false
    assert_equal :false_value, result
  end
  # 同上的意思，不同的用法 条件值在前面和条件在前面的区别

  def test_string9
    i = 1
    result = 1
    while i <= 10
      result = result * i
      i += 1
    end
    assert_equal 3628800, result
  end
  # 根据条件得出，result = 1*2*3*4*5*6*7*8*9*10

  def test_string10
    i = 1
    result = 1
    while true
      break unless i <= 10
      result = result * i
      i += 1
    end
    assert_equal 3628800, result
  end
  # break unless ,除非满足i <= 10, 那么....，所以得出结果

  def test_string11
    i = 0
    result = []
    while i < 10
      i += 1
      next if (i % 2) == 0
      result << i
    end
    assert_equal [1, 3, 5, 7,9], result

  end
  # next if 当满足后面条件时就跳过， i 除以2 的余数为0时就跳过，不为零时就将i的值放入 result中

  def test_string12
    array = ["fish", "and", "chips"]
    result = []
    for item in array
      result << item.upcase
    end
    assert_equal ["FISH", "AND", "CHIPS"], result
  end  
  # array item 将array的内容排列出来，   item.upcase 就是转换string的小写为大写

end
